/*
@author: stanfor
@date: 2023/5/7 08:38
@Version: 1.0
@last modify time : 2023/5/7 08:38
*/

import React from 'react';

/** withExtraFunctionality 方法说明
 * @author: JasonStandFor
 * @description Desc:: 高阶组件
 * @param {React.ReactElement | React.ReactNode} WrappedComponent - 接收一个任意组件
 * @example:
 const MyComponent = ({ extraFunctionality }) => {
  return (
    <div>
      {extraFunctionality && <p>New functionality added!</p>}
      <p>Hello, world!</p>
    </div>
  );
};
 const MyComponentWithExtraFunctionality = withExtraFunctionality(MyComponent);

 在上面的示例中，`withExtraFunctionality` 是一个高阶组件，它将 `MyComponent` 作为参数，返回一个包裹 `MyComponent` 的函数式组件。
 函数式组件使用 `useState` 钩子来创建新的状态和方法，并将它们作为 `props` 传递给 `MyComponent`。
 最后，我们将通过调用 `withExtraFunctionality` 来生成一个名为 `MyComponentWithExtraFunctionality` 的具有额外功能的新组件，并将其导出。
 @return React.ReactElement | React.ReactNode
 * */
export const withExtraFunctionality = (WrappedComponent) => {
  // eslint-disable-next-line react/display-name
  return (props) => {
    const [extraFunctionality, setExtraFunctionality] = React.useState(true);
    // 给组件添加新的方法或者状态

    return <WrappedComponent extraFunctionality={extraFunctionality} setExtraFunctionality={setExtraFunctionality} {...props} />;
  };
};
